table of contents
FSYNC(2) | Руководство программиста Linux | FSYNC(2) |
ИМЯ¶
fsync - синхронизирует состояние файла в памяти с состоянием на диске
ОБЗОР¶
#include <unistd.h>
int fsync(int fd);
int fdatasync(int fd);
ОПИСАНИЕ¶
fsync копирует на диск все части файла, находящиеся в памяти и ожидает пока устройство скажет, что все эти части сохранены. Также данный вызов обновляет информацию о состоянии метаданных. Это создаёт уверенность, что запись в каталоге содержит файл, который также находится на диске. Чтобы проделать это явно вызову fsync также нужен файловый дескриптор каталога.
fdatasync делает тоже самое что и fsync , но сбрасывает только данный пользователя, а не метаданные, такие как mtime или atime.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
В случае успеха возвращается ноль. При ошибке возвращается -1 и errno устанавливается соответствующим образом.
ОШИБКИ¶
- EBADF
- fd не является дескриптором файла, открытого для записи.
- EROFS, EINVAL
- fd связан со специальным файлом, который не поддерживает синхронизацию.
- EIO
- Во время синхронизации произошла ошибка.
ЗАМЕЧАНИЯ¶
В случае если у жёсткого диска разрешена запись кэша, данные могут фактически не быть сохранены после выполнения fsync/fdatasync.
Когда файловая система ext2 монтируется с опцией sync , при вызове fsync также неявно синхронизируются записи в каталогах.
В ядрах до 2.4, fsync на больших файлах может быть неэффективным. В качестве альтернативы можно использовать флаг O_SYNC в вызове open(2).
СООТВЕТСТВИЕ СТАНДАРТАМ¶
POSIX.1b (когда-то назывался POSIX.4)
СМОТРИ ТАКЖЕ¶
bdflush(2), open(2), sync(2), update(8), sync(8) +. mount(8),
ПЕРЕВОД¶
Перевёл с английского Виктор Вислобоков <corochoone@perm.ru> 2003
2001-04-18 | Linux 1.3.85 |